/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mrp.beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import mrp.entity.GestorBaseDatos;
import mrp.entity.Talla;
import mrp.login.Login;
import mrp.web.TallaWeb;

/**
 *
 * @author root
 */
@ManagedBean(name="talla")
@SessionScoped
public class TallaBean implements Serializable{
    
    @ManagedProperty("#{usuarioBean}")
    private UsuarioBean usuarioBean;
    @ManagedProperty("#{login}")
    private Login login;
    @ManagedProperty("#{tallaweb}")
    private TallaWeb tallaweb;
    
    private Talla talla;
    //-------------------- metodos getters and setters-----------------------

    public Login getLogin() {
        return login;
    }

    public void setLogin(Login login) {
        this.login = login;
    }

    public Talla getTalla() {
        return talla;
    }

    public void setTalla(Talla talla) {
        this.talla = talla;
    }

    public TallaWeb getTallaweb() {
        return tallaweb;
    }

    public void setTallaweb(TallaWeb tallaweb) {
        this.tallaweb = tallaweb;
    }

    public UsuarioBean getUsuarioBean() {
        return usuarioBean;
    }

    public void setUsuarioBean(UsuarioBean usuarioBean) {
        this.usuarioBean = usuarioBean;
    }
    
    
    public String getCodTalla() {
        return this.getTalla().getCodTalla();
    }

    public void setCodTalla(String codTalla) {
        this.getTalla().setCodTalla(codTalla);
    }

    public String getDigitador() {
        return this.getTalla().getDigitador();
    }

    public void setDigitador(String digitador) {
        this.getTalla().setDigitador(digitador);
    }

    public String getFechaDigitador() {
        return this.getTalla().getFechaDigitador();
    }

    public void setFechaDigitador(String fechaDigitador) {
        this.getTalla().setFechaDigitador(fechaDigitador);
    }
    public String getTallaAlto() {
        return this.getTalla().getTallaAlto();
    }

    public void setTallaAlto(String tallaAlto) {
        this.getTalla().setTallaAlto(tallaAlto);
    }
    //-----------------metodos de la clase Talla--------------------------
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
    public void mostrarMensaje(String tipoMensaje,String mensaje, String detalle)
    {
        if(tipoMensaje.equals("info"))
        {
            FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO, mensaje,detalle) );   
        }else{
            if(tipoMensaje.equals("error"))
            {
                FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR, mensaje,detalle) );   
            }else{
                if(tipoMensaje.equals("fatal"))
                {
                    FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_FATAL, mensaje,detalle) );   
                }else{
                    if(tipoMensaje.equals("alerta"))
                    {
                        FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_WARN, mensaje,detalle) );   
                    }
                }
            }
        }
    }
    
    private boolean verificarLogin()
    {
        if(login.verificarSesionUsuario().equals(usuarioBean.getUsuario().getIdSesion()))
        {           
            return true;
        }
        else
        {
            this.mostrarMensaje("error","No está ingresado al sistema","");
            this.borrarDatos();
        }
        return false;
    }
    private void setearConexion(GestorBaseDatos gbd)
    {
        gbd.setUsuario(usuarioBean.getUsuario().getCedulaUsuario());
        gbd.setClave(usuarioBean.getUsuario().getClave());
        gbd.setBasedatos("BDEgoZapateria");
        gbd.setPuerto("5432");
        gbd.setServidor("localhost");
    }
    private void borrarDatos()
    {
        this.setDigitador(null);
        this.setFechaDigitador(null);
        this.setCodTalla(null); 
    }
    public boolean ingresarTalla()
    {
        if(this.verificarLogin())
        {
            boolean noExiste;
            
            GestorBaseDatos gbd=new GestorBaseDatos();
            this.setearConexion(gbd);
            
            //obtener fecha y hora del servidor
            List fechaList=gbd.select("SELECT TIMESTAMP WITHOUT TIME ZONE \'now\'");
            String fechaHora=(fechaList.get(0).toString());                      
            
            noExiste=(gbd.select("select codTalla from Talla where codTalla like \'"+this.getCodTalla()+"\'")).isEmpty(); 
            
            if(noExiste)
            {
                List <String> datosLista= new ArrayList<String>();
                String respuestaInsert; //es la respuesta del insert si se almaceno o no los datos

                datosLista.add(0,"\'"+this.getCodTalla()+"\'");
                
                datosLista.add(1,"\'"+this.getTallaAlto()+"\'");

                datosLista.add(2,this.usuarioBean.getUsuario().getCodUsuario());

                datosLista.add(3,"\'"+fechaHora+"\'");

                //Almacenar datos en la tabla Talla
                respuestaInsert=""+gbd.insert("Talla",datosLista,true);
           
                if(respuestaInsert.equals("Registro almacenado correctamente"))
                {
                        mostrarMensaje("info","Ingresado Nueva Tallas/Alto!","");
                        this.borrarDatos();
                        return true;
                }
                else
                {
                    mostrarMensaje("fatal","Error al almacenar los datos","");
                }                
            }
            else
            {
                this.mostrarMensaje("error","Error: La Tallas/Alto que desea ingresar ya existe","");
                this.borrarDatos();     
                return true;
            }           
        }
        return false;
    }
    public List<List> consultarTalla()
    {   
        List<List>listaRetorno=new ArrayList<List>();
        List<Talla>listaTalla=new ArrayList<Talla>();

        GestorBaseDatos gbd=new GestorBaseDatos();
        this.setearConexion(gbd);
        String query="select * from Talla order by codTalla";       
        
        List<List>lista=gbd.selectVarios(query);
        for(int j=0;j<lista.size();j++)
        {
            listaTalla.add(new Talla(((lista.get(j)).get(0)).toString(), ((lista.get(j)).get(1)).toString(), ((lista.get(j)).get(2)).toString(), ((lista.get(j)).get(3)).toString()));               
        }           
       
       System.out.println("Talla query es"+query); 
                
        listaRetorno.add(listaTalla);

        System.out.println("Clase Talla el valor es"+query+" ");
        System.out.println("listaTalla "+listaTalla.size()+ " listaRetorno "+listaRetorno.size());
        return listaRetorno;
    }
    public boolean eliminarTalla(String codTalla)
    {        
        if(this.verificarLogin())
        {
            int enSistema=0;
            GestorBaseDatos gbd=new GestorBaseDatos();
            this.setearConexion(gbd);
            //verificar que la horma a eliminar no este asociada con algun modelo de calzado
            if(Integer.parseInt((gbd.select("select count(codTallaTacoSuela) from TallaTacoSuela where  Talla_fk= \'"+codTalla+"\'")).get(0).toString())>0)
                enSistema=1;
            if(Integer.parseInt((gbd.select("select count(codDetalleTalla) from DetalleTalla where  Talla_fk= \'"+codTalla+"\'")).get(0).toString())>0)
                enSistema=1;
            if(enSistema==0)            
            {
               if(gbd.delete("Talla","codTalla", "\'"+codTalla+"\'",true)) return true;               
            }
            else
            {
                this.mostrarMensaje("error","Error: La Tallas/Alto que desea eliminar tiene una o varias asociaciones.","");
            }
        }
        return false;
    }
}
